///////////////////////////////
// Analizador léxico para C
///////////////////////////////

lexer grammar AnalexC;

options {
  language = Java;
}

@header {
  package practpl.seis;
}

@members {
     private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
     public ArrayList<RecognitionException> getErrors() {
        return errors;
     }
     @Override
     public void reportError (RecognitionException e) {
        String msg = getErrorMessage(e, getTokenNames());
        System.err.println(msg);
        errors.add(e);
     }
}

//Palabras reservadas
WHILE: 'while';
IF: 'if';
VOID: 'void';
BREAK: 'break';
INT: 'int';
FOR: 'for';
CHAR: 'char';

BLANCO : (' '|'\t'|'\r\n') {skip();};

fragment LETRA: ('a'..'z')|('A'..'Z');

IDENT: (LETRA)+;
CADENA: '"' (~('"'))* '"';

fragment  DIGITO : '0'..'9';
FLOAT: (DIGITO)+('.' DIGITO DIGITO);
NUMERO : (DIGITO)+('.'(DIGITO)+)?;

CARACTER: COMILLASIM ~('\'') COMILLASIM;
MAS: '+';
MENOS: '-';
MULT: '*';
DIV: '/';
BARRABAJA: '_';
COLON: ':';
INTERROGACION: '?';
COMILLASIM: '\'';

PARENTESISA: '(';
PARENTESISC: ')';

LLAVEA : '{';
LLAVEC : '}';

SEPARADOR : ';' ;
COMA : ',';

IGUAL: '=';
MAYOR: '>';
MENOR: '<';
MAYORIGUAL: '<=';
MENORIGUAL: '>=';
COMPARACION: '==';

OR: '||';
AND : '&&';
NOT: '!';
